#  “显性守护者” by 阎兆珣 2020-7
# 按照标志字符串，把out.log截成两段
echo 程序所在的绝对目录，若就在本目录内则不填
read path
cd $path
# 交互式确认分割位置
while true; do
  echo 在out.log中要找的关键字段:
  read keyword
  result=`grep -n $keyword out.log` 
  if [ "$result" ]; then
    echo "$result" 
  else
    echo 查无此字段
    continue
  fi
  echo '请输入:前的行号，或上述结果的第几行(结尾加p)'
  read linen 
  if [[ $linen =~ .*p ]]; then
    echo 第二种输入
    line=`echo "$result"|sed -n $linen` #&& echo $line
    linen=${line%%:*}
  else
    echo 第一种输入
    line=`echo "$result"|grep "^${linen}"`
    #echo $line
  fi
  
  echo "$linen 这是将对${path}/out.log分割的行号"，以下是该行内容
  echo ${line#*:} 
  echo 确认输入y，否认输入任何:
  read confirm
  [[ "$confirm" = 'y' ]] && break   
done
# 预览
echo '是否预览分割行及之后的新文件(y)？进入预览后[PgDn][PgUp]翻页，q退出'
read ifrev
if [ $ifrev = 'y' ]; then
  sed -n $linen',$p' out.log |less
  echo '确认分割文件(y)?'
  read ifcut
  [[ $ifcut != 'y' ]] && exit 0
fi

# 分割及命名
let line_=$linen-1
#echo $line_
while true
do
  echo '请输入分割后，该行之前的所有行的文件名(自动加.log）:'
  read oldfile
  [[ $oldfile = 'out' ]] && echo 不可以用此名 || break
done
#echo out of while
oldfile=$oldfile'.log'
sed -n "1,${line_}p" out.log > "$oldfile" 
echo 已生成 ${path}/$oldfile
echo '该行及以后的文件名(自动加.log，out可不填)'
read newfile
if [ "$newfile" ]; then
  newfile=$newfile'.log'
  sed -n $linen',$p' out.log > $newfile
  echo 已生成 ${path}/$newfile 
else
  newfile=分割后的临时文件。
  sed -n $linen',$p' out.log > $newfile && mv $newfile out.log
  echo 已改写 $path'/out.log'
fi
echo "执行完毕，请查阅${path}中的新文件"

